{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.原理\n",
    "借助于最近邻分类(KNN)的思想，异常样本也可以这样考虑：如果某样本离它最近的$k$个样本距离之和越大，那么它越有可能是异常点。这便是KNN用于异常检测的主要思想..."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.代码实现\n",
    "\n",
    "封装在ml_model.outlier_detect中..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "os.chdir('../')\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "from sklearn.datasets import make_classification\n",
    "from ml_models.outlier_detect import KNN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#造数据\n",
    "X, _ = make_classification(n_samples=1000, n_features=2,\n",
    "                           n_informative=2, n_redundant=0,\n",
    "                           n_repeated=0, n_classes=3,\n",
    "                           n_clusters_per_class=1, weights=[0.01, 0.05, 0.94],\n",
    "                           class_sep=0.8, random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "#训练\n",
    "knn = KNN()\n",
    "score = knn.fit_transform(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#预测\n",
    "import numpy as np\n",
    "thresh=np.percentile(score,99)#前1%设置为异常值\n",
    "plt.scatter(x=X[:, 0], y=X[:, 1], c=score > thresh)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.分析\n",
    "\n",
    "这里主要对KNN的思路做介绍，对于大量数据，KNN难以胜任，如果有$N$个样本，直接暴力训练（两两计算距离）的复杂度高达$O(N^2)$，利用其它数据结构进行优化，比如kd树，平均的时间复杂度也达到了$O(Nlog N)$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
